package vista;

import java.awt.Component;
import java.awt.color.CMMException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import modelo.Empleado;
import modelo.EstadoServicio;
import modelo.Servicio;
import modelo.ServicioPrestado;
import modelo.Status;
import modelo.dao.Servidor;

import com.toedter.calendar.JDateChooser;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class DlgReporteServiciosPrestados extends javax.swing.JDialog {

	{
		// Set Look & Feel
		try {
			javax.swing.UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private JPanel jPanel1;
	private JComboBox jComboBox2;
	private JComboBox jComboBox3;
	private JRadioButton rbFechaFinal;
	private JLabel lblHasta;
	private JComboBox jComboBox1;
	private JLabel lblDesde;
	private JRadioButton rbFecha;
	private JComboBox cbEmpleado;
	private JComboBox cbEstado;
	private JRadioButton rbEmpleado;
	private JRadioButton rbEstado;
	private JLabel jLabel2;
	private JScrollPane jScrollPane1;
	private JButton btConsultar;
	private JButton btSalir;
	private JTable tbServicios;
	private JComboBox jComboBox4;
	private JLabel jLabel1;
	private JLabel lblFiltros;

	private JDateChooser dcHastaFechaInicio;
	private JDateChooser dcDesdeFechaInicio;
	private JDateChooser dcDesdeFechaFin;
	private JDateChooser dcHastaFechaFin;

	/**
	 * Auto-generated main method to display this JDialog
	 */
	/*
	 * public static void main(String[] args) { SwingUtilities.invokeLater(new
	 * Runnable() { public void run() { JFrame frame = new JFrame();
	 * DlgReporteServiciosPrestados inst = new
	 * DlgReporteServiciosPrestados(frame); inst.setVisible(true); } }); }
	 */

	public DlgReporteServiciosPrestados(JFrame frame) {
		super(frame);
		initGUI();
	}

	private void initGUI() {
		try {
			{
				getContentPane().setLayout(null);
				this.setTitle("Reportes de Servicios Prestados");
				{
					jPanel1 = new JPanel();
					getContentPane().add(jPanel1);
					jPanel1.setBounds(33, 38, 693, 159);
					jPanel1.setBorder(BorderFactory
							.createEtchedBorder(BevelBorder.LOWERED));
					jPanel1.setLayout(null);
					{
						rbEstado = new JRadioButton();
						jPanel1.add(rbEstado);
						rbEstado.setText("En Estado:");
						rbEstado.setBounds(15, 19, 93, 18);
						rbEstado.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						rbEmpleado = new JRadioButton();
						jPanel1.add(rbEmpleado);
						rbEmpleado.setText("Jefe de Equipo:");
						rbEmpleado.setBounds(15, 50, 132, 18);
						rbEmpleado.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						cbEstado = new JComboBox();
						jPanel1.add(cbEstado);
						cbEstado.setBounds(135, 14, 152, 28);
						cbEstado.setEnabled(false);
					}
					{
						cbEmpleado = new JComboBox();
						jPanel1.add(cbEmpleado);
						cbEmpleado.setBounds(135, 50, 149, 28);
						cbEmpleado.setEnabled(false);
					}
					{
						btConsultar = new JButton();
						jPanel1.add(btConsultar);
						btConsultar.setText("Consultar");
						btConsultar.setIcon(new ImageIcon(getClass()
								.getClassLoader().getResource(
										"iconos/report.png")));
						btConsultar.setHorizontalTextPosition(JButton.CENTER);
						btConsultar.setVerticalTextPosition(JButton.BOTTOM);
						btConsultar.setBounds(21, 98, 106, 40);
					}
					{
						rbFecha = new JRadioButton();
						jPanel1.add(rbFecha);
						rbFecha.setText("Fecha de Inicio:");
						rbFecha.setBounds(299, 20, 140, 18);
						rbFecha.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						lblDesde = new JLabel();
						jPanel1.add(lblDesde);
						lblDesde.setText("Desde:");
						lblDesde.setBounds(299, 58, 45, 14);
						lblDesde.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						dcDesdeFechaInicio = new JDateChooser();
						jPanel1.add(dcDesdeFechaInicio);
						dcDesdeFechaInicio.setBounds(343, 50, 134, 28);
						dcDesdeFechaInicio.setDate(new Date());
						dcDesdeFechaInicio.setEnabled(false);
					}
					{
						lblHasta = new JLabel();
						jPanel1.add(lblHasta);
						lblHasta.setText("Hasta:");
						lblHasta.setBounds(485, 58, 43, 14);
						lblHasta.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						dcHastaFechaInicio = new JDateChooser();
						jPanel1.add(dcHastaFechaInicio);
						dcHastaFechaInicio.setBounds(534, 50, 144, 28);
						dcHastaFechaInicio.setDate(new Date());
						dcHastaFechaInicio.setEnabled(false);
					}
					{
						rbFechaFinal = new JRadioButton();
						jPanel1.add(rbFechaFinal);
						rbFechaFinal.setText("Fecha de Finalizacion:");
						rbFechaFinal.setBounds(298, 90, 174, 18);
						rbFechaFinal
								.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						dcDesdeFechaFin = new JDateChooser();
						jPanel1.add(dcDesdeFechaFin);
						dcDesdeFechaFin.setBounds(534, 123, 144, 28);
						dcDesdeFechaFin.setDate(new Date());
						dcDesdeFechaFin.setEnabled(false);
					}
					{
						jLabel1 = new JLabel();
						jPanel1.add(jLabel1);
						jLabel1.setText("Hasta:");
						jLabel1.setBounds(485, 131, 43, 14);
						jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
					{
						dcHastaFechaFin = new JDateChooser();
						jPanel1.add(dcHastaFechaFin);
						dcHastaFechaFin.setBounds(344, 123, 138, 28);
						dcHastaFechaFin.setDate(new Date());
						dcHastaFechaFin.setEnabled(false);
					}
					{
						jLabel2 = new JLabel();
						jPanel1.add(jLabel2);
						jLabel2.setText("Desde:");
						jLabel2.setBounds(301, 133, 45, 11);
						jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11));
					}
				}
				{
					lblFiltros = new JLabel();
					getContentPane().add(lblFiltros);
					lblFiltros.setText("Filtros:");
					lblFiltros.setBounds(39, 18, 58, 14);
					lblFiltros.setFont(new java.awt.Font("Tahoma", 1, 11));
				}
				{
					jScrollPane1 = new JScrollPane();
					getContentPane().add(jScrollPane1);
					jScrollPane1.setBounds(44, 242, 682, 162);
					{
						tbServicios = new JTable();
						jScrollPane1.setViewportView(tbServicios);
						tbServicios.setBounds(145, 291, 299, 99);
						tbServicios.setPreferredSize(new java.awt.Dimension(299, 99));
					}
				}
				{
					btSalir = new JButton();
					getContentPane().add(btSalir);
					btSalir.setText("Salir");
					btSalir.setIcon(new ImageIcon(getClass().getClassLoader()
							.getResource("iconos/Salir.gif")));
					btSalir.setHorizontalTextPosition(JButton.CENTER);
					btSalir.setVerticalTextPosition(JButton.BOTTOM);
					btSalir.setBounds(647, 442, 79, 40);
				}
			}
			this.setSize(753, 541);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private DlgReporteServiciosPrestados dspres = this;
	private ArrayList<ServicioPrestado> servicios = new ArrayList<ServicioPrestado>();
	private ArrayList<Empleado> empleados = null;
	private ArrayList<EstadoServicio> estadosServicio = null;
	private AbstractTableModel atmServicios = null;

	public void mostrar() {
		setLocationRelativeTo(null);

		empleados = Servidor.empleados().consultarEmpleadosPorStatus(Status.ACTIVO);
		estadosServicio = Servidor.servicios().consultarEstadosServicio();
		
		cbEmpleado.setModel(new DefaultComboBoxModel(empleados.toArray()));
		cbEstado.setModel(new DefaultComboBoxModel(estadosServicio.toArray()));
		
		atmServicios = new AbstractTableModel() {
			@Override
			public Object getValueAt(int rowIndex, int columnIndex) {
				ServicioPrestado e = servicios.get(rowIndex);
				switch (columnIndex) {
				case 0: return e.getDescripcion();
				case 1: return e.getEstado_servicio().getDescripcion();
				case 2: return e.getFecha_inicio() == null ? "" : e.getFecha_inicio();
				case 3: return e.getFechaFinalizacion() == null ? "" : e.getFechaFinalizacion();
				case 4: return e.getJefe() == null ? "" : e.getJefe();
				}
				return null;
			}
			
			@Override
			public String getColumnName(int columnIndex) {
				switch (columnIndex) {
				case 0: return "Servicio";
				case 1: return "Estado";
				case 2: return "Fecha inicial";
				case 3: return "Fecha final";
				case 4: return "Jefe de Equipo";
				}
				return null;
			}
			
			@Override
			public int getRowCount() {
				return servicios.size();
			}
			
			@Override
			public int getColumnCount() {
				return 5;
			}
		};
		
		tbServicios.setModel(atmServicios);
		
		rbEmpleado.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				cbEmpleado.setEnabled(rbEmpleado.isSelected());
			}
		});
		
		rbEstado.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent arg0) {
				cbEstado.setEnabled(rbEstado.isSelected());
			}
		});
		
		rbFecha.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dcDesdeFechaInicio.setEnabled(rbFecha.isSelected());
				dcHastaFechaInicio.setEnabled(rbFecha.isSelected());
			}
		});
		
		rbFechaFinal.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dcDesdeFechaFin.setEnabled(rbFechaFinal.isSelected());
				dcHastaFechaFin.setEnabled(rbFechaFinal.isSelected());
				}
		});
		
		btConsultar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if (rbFecha.isSelected() && dcDesdeFechaInicio.getDate().compareTo(dcHastaFechaInicio.getDate()) > 0) {
					Date d = dcDesdeFechaInicio.getDate();
					dcDesdeFechaInicio.setDate(dcHastaFechaInicio.getDate());
					dcHastaFechaInicio.setDate(d);
				}
				
				if (rbFechaFinal.isSelected() && dcDesdeFechaFin.getDate().compareTo(dcHastaFechaFin.getDate()) > 0) {
					Date d1 = dcDesdeFechaFin.getDate();
					dcDesdeFechaFin.setDate(dcHastaFechaFin.getDate());
					dcHastaFechaFin.setDate(d1);
				}
				
				servicios = Servidor.serviciosPrestados().consultarServiciosPrestadosPorFiltro(
						rbEstado.isSelected() ? (EstadoServicio) cbEstado.getSelectedItem() : null,
						rbEmpleado.isSelected() ? (Empleado) cbEmpleado.getSelectedItem() : null,
						rbFecha.isSelected() ? new java.sql.Date(dcDesdeFechaInicio.getDate().getTime()) : null,
						rbFecha.isSelected() ? new java.sql.Date(dcHastaFechaInicio.getDate().getTime()) : null,
						rbFechaFinal.isSelected() ? new java.sql.Date(dcDesdeFechaFin.getDate().getTime()) : null,
						rbFechaFinal.isSelected() ? new java.sql.Date(dcHastaFechaFin.getDate().getTime()) : null);
				
				System.out.println(servicios.size());
				
				atmServicios.fireTableDataChanged();
			}
		});
		
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dspres.dispose();
			}
		});

		setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}

}